import request, { wrapRequest } from './http';

// 自动循环导入 modules 下所有目录
const importAllAPIs = contextFiles => {
  const modules = {
    isDir: true,
  };

  contextFiles.keys().forEach(key => {
    let moduleKey = key.replace(/(\.\/|\.js)/g, '');
    const moduleKeyArr = moduleKey.split(/[/]/);
    const moduleKeyLength = moduleKeyArr.length;

    let currentModule = modules;
    moduleKeyArr.forEach((item, index) => {
      if (index === moduleKeyLength - 1) {
        currentModule[item] = contextFiles(key).default;
      } else {
        currentModule[item] = currentModule[item] || {
          isDir: true,
        };
        currentModule = currentModule[item];
      }
    });
  });
  return modules;
};

const api = wrapRequest(importAllAPIs(require.context('./modules', true, /\.js$/)));

// 自动挂载到 Vue 实例上
api.install = Vue => {
  if (api.install.installed) {
    return;
  }

  api.install.installed = true;

  Object.defineProperties(Vue.prototype, {
    // 注意，此处挂载在 Vue 原型的 $api 对象上
    $api: {
      get() {
        return api;
      },
    },
  });
};

// 默认导出api
export default api;

// 单独导出 axios 实例 request
export { request };
